package com.linkgie.galaxyframework.fileservice;

import com.linkgie.galaxyframework.security.AccountIdentity;

/**
 * 文件上传处理接口；
 * 
 * @author huanghaiquan
 *
 */
public interface FileAccessHandle {
	
	/**
	 * 门类；
	 * 
	 * @return
	 */
	String getSubject();
	
	/**
	 * 是否接受即将上传的指定文件；
	 * 
	 * @param token
	 * @param newFile
	 * @return 返回 true 表示接受并处理文件；返回 false 则忽略该文件；
	 * 
	 */
	boolean acceptUpload(FilePayload newFile);
	
	/**
	 * 校验码算法；<p>
	 * 
	 * 默认为 SHA256 ；<p>
	 * 
	 * 如果为 null ，则不生成校验码；
	 * 
	 * @return
	 */
	default String getChecksumAlgorithm() {
		return "SHA256";
	}
	
	/**
	 * 是否接受下载；
	 * 
	 * @param file
	 * @param requestUser 下载用户；如果为匿名用户下载，则参数为 null；
	 * @return
	 */
	DownloadPermission getDownloadPermission();
	
	/**
	 * 处理新上传的文件；<p>
	 * 
	 * 
	 * 当文件上传完成后触发此方法；
	 * 
	 * @param newFile 上传的文件；
	 * @param uploadUser 上传文件的用户；如果为匿名用户上传，则参数为 null；
	 * @param context 文件处理上下文；
	 */
	FileAttributes processUpload(FilePayload newFile, FileProcessContext context);
	
	/**
	 * 处理下载文件的请求；<p>
	 * 
	 * 当文件下载开始前触发此方法；
	 * 
	 * @param newFile
	 * @param downloaUser 下载文件的用户；如果为匿名下载，则参数为 null ；
	 * @param context
	 */
	void processDownload(FileObject newFile, AccountIdentity downloaUser, FileProcessContext context);
	
}
